package com.blog.cmrpersonalblog.dto.category.request;

import lombok.Data;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.Max;

/**
 * 分类创建请求
 */
@Data
public class CategoryCreateRequest {

    /**
     * 分类名称
     */
    @NotBlank(message = "分类名称不能为空")
    @Size(max = 50, message = "分类名称长度不能超过50个字符")
    private String name;

    /**
     * 分类描述
     */
    @Size(max = 200, message = "分类描述长度不能超过200个字符")
    private String description;

    /**
     * 分类图标
     */
    @Size(max = 200, message = "分类图标URL长度不能超过200个字符")
    private String icon;

    /**
     * 排序
     */
    @NotNull(message = "排序不能为空")
    @Min(value = 0, message = "排序不能小于0")
    @Max(value = 9999, message = "排序不能大于9999")
    private Integer sortOrder;

    /**
     * 状态 0-禁用 1-启用
     */
    @NotNull(message = "状态不能为空")
    private Integer status;

    /**
     * 验证状态值是否有效
     */
    public boolean isValidStatus() {
        return status != null && (status == 0 || status == 1);
    }

    /**
     * 验证排序值是否有效
     */
    public boolean isValidSortOrder() {
        return sortOrder != null && sortOrder >= 0 && sortOrder <= 9999;
    }

    /**
     * 验证请求数据是否有效
     */
    public boolean isValid() {
        return name != null && !name.trim().isEmpty() && 
               name.length() <= 50 &&
               (description == null || description.length() <= 200) &&
               (icon == null || icon.length() <= 200) &&
               isValidStatus() && 
               isValidSortOrder();
    }
}
